home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / system / ctest259.zip / COMPTEST.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-07  |  55KB  |  1,454 lines

  1. PROGRAM CompTest; { Copyright (c) 1988-1993 Norbert Juffa }
  2.  
  3. {$A+,B-,D-,E+,F-,G-,I-,L-,N+,O-,R-,S-,V-,X-}
  4. {$M 4096,0,655360}
  5.  
  6. USES DOS, Crt, Time, Whet, Dhry, LLL, Caches;
  7.  
  8. CONST
  9.    MaxBufSize= 65500;
  10.    ClockFreq = 1.193182e6;
  11.  
  12.  
  13. TYPE
  14.    LongWord  = ARRAY [1..2] OF WORD;
  15.    IOPuffer  = ARRAY [1..MaxBufSize] OF BYTE;
  16.    PufferZgr = ^IOPuffer;
  17.    Processor = (NA, i88, i86, V20, V30, i188, i186, i286, i386, i386sx, ct386,
  18.                 ct386sx, c486dlc, c486slc, rapidcad, i486, i486sx, Pentium);
  19.    CardType  = (MDA, CGA, Herkules, EGA, MCGA, VGA, PGA);
  20.    ResultRec = RECORD
  21.                   CPUType: BYTE;
  22.                   NDPType: BYTE;
  23.                   AAMTime: INTEGER;
  24.                   Dummy1:  INTEGER;
  25.                   MoveWTime,
  26.                   BIOSWriteTime, MoveBTime, EMS_Time, Ext_Time, ScreenFillTime,
  27.                   Dummy2, Speed87, Speed287, MoveDTime: INTEGER;
  28.                END;
  29.  
  30.  
  31.  
  32. CONST
  33.    SIOBase:     ARRAY [1..4] OF WORD =
  34.                 ($3F8, $2F8, $3E8, $2E8);
  35.    SIOTypeStr:  ARRAY [1..5] OF STRING [7] =
  36.                 ('8250', '16450', '16550', '16550A', 'unknown');
  37.    BusWidth:    ARRAY [i88 .. pentium] OF BYTE =
  38.                 (8, 16, 8, 16, 8, 16, 16, 32, 16, 32, 16,
  39.                  32, 16, 32, 32, 32, 32);
  40.    AAM_Time:    ARRAY [i88 .. pentium] OF INTEGER =
  41.                 (77, 77, 15, 15, 19, 19, 16, 17, 17, 16, 16,
  42.                  17, 17, 15, 15, 15, 18);
  43.    FillTime:    ARRAY [i88 .. pentium] OF INTEGER =
  44.                 (10, 10, 4, 4, 9, 9, 3, 5, 5, 5, 5,
  45.                 4, 4, 4, 4, 4, 1);
  46.    MoveTime:    ARRAY [i88 .. pentium] OF INTEGER =
  47.                 (25, 17, 8, 16, 8, 16, 4, 4, 8, 4, 8,
  48.                 4, 4, 5, 3, 3, 1);
  49.    LFaktor:     ARRAY [i88 .. pentium] OF REAL =
  50.                 (1, 1.45, 1.15, 1.78, 1.15, 1.78, 3.3, 4.1, 3.4,
  51.                  4.5, 3.7, 5.0, 6.0, 6.5, 8.5, 8.5, 17);
  52.    CPU_Name:    ARRAY [i88 .. pentium] OF STRING [15] =
  53.                 ('Intel 8088', 'Intel 8086', 'NEC V20', 'NEC V30',
  54.                  'Intel 80188', 'Intel 80186', 'Intel 80286',
  55.                  'Intel 80386', 'Intel 80386SX', 'C&T 38600DX',
  56.                  'C&T 38600SX', 'Cyrix 486DLC', 'Cyrix 486SLC',
  57.                  'Intel RapidCAD', 'Intel 80486',
  58.                  'Intel 80486SX', 'Intel Pentium');
  59.    CoProcessor: ARRAY [0 .. 28] OF STRING [19] =
  60.                 ('NOT INSTALLED', 'Emulation via INT 7', 'Intel 8087',
  61.                  'Intel 80C187', 'Intel 80287', 'Intel 80287XL', 'Intel 80387',
  62.                  'Intel 80387sx', 'IIT 2C87', 'IIT 2C87', 'IIT 3C87',
  63.                  'IIT 3C87sx', 'Cyrix 82S87 (old)', 'Cyrix 82S87 (old)',
  64.                  'Cyrix 83D87', 'Cyrix 83S87 (old)', 'ULSI 83C87', 'ULSI 83S87',
  65.                  'C&T 38700DX', 'C&T 38700SX', 'Intel 80387DX', 'Intel RapidCAD',
  66.                  'Intel 486', 'Cyrix 82S87 (new)', 'Cyrix 82S87 (new)',
  67.                  'Cyrix 387+', 'Cyrix 83S87 (new)', 'Cyrix EMC87',
  68.                  'Intel Pentium');
  69.    Installed:   ARRAY [FALSE..TRUE] OF STRING [13] =
  70.                 ('NOT INSTALLED', 'INSTALLED');
  71.    Computer:    ARRAY [$F5..$FF] OF STRING [14] =
  72.                 ('PS/2 Model 60', 'PS/2 Model 50', 'XT-286', 'PS/2 Model 80',
  73.                  'Laptop', 'PS/2 Model 30', 'XT', 'AT', 'PCjr', 'XT / Portable',
  74.                  'PC');
  75.    CardMemBegin:ARRAY [MDA .. PGA] OF WORD =
  76.                 ($B000, $B800, $B000, $A000, $A000, $A000, $A000);
  77.    CardName:    ARRAY [MDA .. PGA] OF STRING [37] =
  78.                 ('Monochrome Display Adapter (MDA)',
  79.                  'Color Graphics Adapter (CGA)',
  80.                  'Hercules Graphics Card (HGC)',
  81.                  'Enhanced Graphics Adapter (EGA)',
  82.                  'Multi Color Graphics Array (MCGA)',
  83.                  'Video Graphics Array (VGA)',
  84.                  'Professional Graphics Adapter (PGA)');
  85.  
  86.  
  87. VAR
  88.    SIOType:                                         ARRAY [1..4] OF BYTE;
  89.  
  90.    SIOCtrl, SIOStat, SerOut, DataWidth, SaveByte,
  91.    ConfigStatHi, ConfigStatLo, DOS_Drives,
  92.    NrOfHardDisks, NrOfFloppies, EGAInfo, DriveByte,
  93.    ErrByte, NrHD, NrDD, Nr3DD, Nr3HD, Drive1,
  94.    Drive2, Typ, Head1, K:                           BYTE;
  95.  
  96.    MemExists, GamesAdaptor, MousePresent,
  97.    ExtendedMem, ExpandedMem, MonoChromMode,
  98.    Disktest, OldMemExists, ExtraRAMFound, EGAPres,
  99.    VGAPres, ANSIPresent, Debug, Emu, Weitek,
  100.    PortExists:                                      BOOLEAN;
  101.  
  102.    Ch:                                              CHAR;
  103.  
  104.    ScreenWaits, Segment, OldSegment, NrParallelPorts,
  105.    NrSerialPorts, DefaultDr, ExtendedMemSize,
  106.    ExpandedMemSize, SystemMemory, L, DOS_Memory,
  107.    EGAMem, UsedMemory, BufSeg, BufOff, Head,
  108.    Dummy, Track, RAMBeg, ROMSize, EMS_Base,
  109.    FillSize, FirstLevel, SecondLevel, SPC,
  110.    SegTest, OfsTest, ChkSum:                        WORD;
  111.  
  112.    Start, DOSWriteTime, BIOSWriteTime, SavedTime,
  113.    CacheTstTime, HeapPointer:                       LONGINT;
  114.  
  115.    MoveTakte, MoveWTakte, FillTakte, Frequency,
  116.    Waitstates, Cache2Thru, Frequency87, Durchsatz,
  117.    EMS_Thruput, Ext_Thruput, DOSSpeed, CacheThru,
  118.    MemThru, BIOSSpeed, Index, Version, ThruPut:     REAL;
  119.  
  120.    MegaFlops, Dhrys, Whets:                         DOUBLE;
  121.    Fil:                                             TEXT;
  122.    EMS_Version:                                     STRING [3];
  123.    ComputerType, ScreenType:                        STRING [35];
  124.    ProcessorType:                                   STRING [15];
  125.    DiskTypeStr, DriveStr:                           STRING [45];
  126.    TestStr:                                         STRING [86];
  127.    ScreenAddr:                                      POINTER;
  128.    CPU:                                             Processor;
  129.    GraphCard:                                       CardType;
  130.    Regs:                                            Registers;
  131.    Result:                                          ResultRec;
  132.    DummyPtr, BufPtr:                                PufferZgr;
  133.    MoveBuffer:                                      POINTER;
  134.    Heads, Sectors, DOSCylinders, Tracks, Cylinders: ARRAY [$80..$83] OF WORD;
  135.    Capacity, CylSize:                               ARRAY [$80..$83] OF LONGINT;
  136.    Valid:                                           ARRAY [$80..$83] OF BOOLEAN;
  137.    MaximumAccess, AverageAccess, TrackToTrack,
  138.    DiskThruPut:                                     ARRAY [$80..$83] OF REAL;
  139.    CacheOn:                                         ARRAY [$80..$83] OF BOOLEAN;
  140.    InfoBuf:                                         ARRAY [0..64] OF BYTE;
  141.  
  142.  
  143.  
  144. {$L CCNEW.OBJ}
  145.  
  146. PROCEDURE SpeedTest (Debg, Ext_Flag, EMS_Flag: WORD;
  147.                      EPtr, Bptr, Sptr: POINTER;
  148.                      VAR Results: ResultRec); NEAR; EXTERNAL;
  149.  
  150.  
  151.  
  152. FUNCTION EMM_Installed: BOOLEAN;
  153.  
  154. VAR
  155.   EMM_Name: String[8];
  156.   Regs    : Registers;
  157.  
  158. BEGIN
  159.    EMM_Name := '        ';
  160.    Regs.AH := $35;
  161.    Regs.AL := $67;
  162.    Intr ($21, Regs);
  163.    Move (Mem [Regs.ES:$0A], EMM_Name[1], 8);
  164.    EMM_Installed := (EMM_Name = 'EMMXXXX0');
  165. END;
  166.  
  167.  
  168.  
  169. FUNCTION EMS_Memory: INTEGER;
  170. VAR Regs: Registers;
  171. BEGIN
  172.     Regs.AH    := $42;
  173.     Intr ($67, Regs);
  174.     EMS_Memory := Regs.DX * 16;
  175. END;
  176.  
  177.  
  178. FUNCTION GetEMSVersion: STRING;
  179. VAR Regs: Registers;
  180. BEGIN
  181.    Regs.AH := $46;
  182.    Intr ($67, Regs);
  183.    GetEMSVersion := Char (Regs.AL SHR 4 + 48) + '.' + Char(Regs.AL AND $F +48); { dito für Neben-Versionsnummer }
  184. END;
  185.  
  186.  
  187.  
  188. FUNCTION CheckMouse: BOOLEAN;
  189. VAR Regs: Registers;
  190. BEGIN
  191.    Regs.AX := 5;                 { get button press information (destroys AX) }
  192.    Regs.BX := 0;                 { left button }
  193.    Intr ($33, Regs);
  194.    CheckMouse := (Regs.AX <> 5);
  195. END;
  196.  
  197.  
  198.  
  199. FUNCTION GetEMSBase: WORD;
  200. VAR Regs: Registers;
  201. BEGIN
  202.    Regs.AH := $41;
  203.    Intr ($67, Regs);
  204.    GetEMSBase := Regs.BX;
  205. END;
  206.  
  207.  
  208.  
  209. {$F+}
  210. FUNCTION HeapFunc (Size: WORD): INTEGER;
  211. {$F-}
  212. BEGIN
  213.    HeapFunc := 1;
  214. END;
  215.  
  216.  
  217.  
  218. FUNCTION HercPresent: BOOLEAN;
  219. BEGIN
  220.    Inline($BB/$00/$01/$BA/$BA/$03/$EC/$88/$C4/$80/$E4/$80/$B9/$40/$00/$EC/
  221.           $24/$80/$38/$E0/$E1/$F9/$75/$05/$4B/$75/$F1/$EB/$33/$